package co.fitstart.admin.service;

import java.util.List;
import java.util.Map;

import org.springframework.web.multipart.MultipartFile;

import com.demo2do.core.support.Page;

import co.fitstart.admin.entity.search.OnlineRoundSearch;
import co.fitstart.entity.course.CourseType;
import co.fitstart.entity.course.round.CourseRound;
import co.fitstart.entity.course.round.CourseRoundGroup;
import co.fitstart.entity.course.round.CourseRoundResource;
import co.fitstart.entity.order.OrderInvestigateRecord;
import co.fitstart.entity.product.Product;

/**
 * 
 * @author lidan
 *
 */
public interface OnlineRoundService {
    
    /**
     * 
     * @param courseType
     * @param page
     * @return
     */
    public List<CourseRound> list(CourseType courseType, Page page);
    
    /**
     * 
     * @param roundCode
     * @param page
     * @return
     */
    public List<CourseRound> list(String roundCode, Page page);
    
    /**
     * 
     * @param roundCode
     * @param page
     * @return
     */
    public List<CourseRound> listUnfinishCourseRound(String roundCode, Page page);
    
    /**
     * 
     * @param code
     * @param groupName
     * @param page
     * @return
     */
    public List<CourseRound> listFinishRoundByGroup(String code, String groupName, Page page);
    
    /**
     * 
     * @param code
     * @return
     */
    public Map<String, List<CourseRound>> listCourseRoundByGroup(String code);
    
    /**
     * 
     * @param onlineRoundSearch
     * @param groupName
     * @param page
     * @return
     */
    public List<CourseRound> search(OnlineRoundSearch onlineRoundSearch, String groupName, Page page);
    
    /**
     * 
     * @param courseId
     * @return
     */
    public CourseRound loadCourseRound(Long courseId);
    
    /**
     * 
     * @param courseRound
     * @param remarks
     */
    public void editRemarks(CourseRound courseRound, String remarks);
    
    /**
     * 
     * @param product
     * @return
     */
    public List<OrderInvestigateRecord> getOrderInvestigateRecord(Product product);
    
    /**
     * 
     * @param code
     * @return
     */
    public Map<String, List<OrderInvestigateRecord>> getOrderInvestigateRecord(String code);
    
    /**
     * 
     * @param roundCode
     * @return
     */
    public CourseRoundResource loadCourseRoundResource(String roundCode);
    
    /**
     * 
     * @param courseRound
     * @param product
     * @param code
     */
    public void transferCamp(CourseRound courseRound, Product product, String code);
    
    /**
     * 
     * @param courseRound
     * @param multipartFile
     */
    public void saveUserQrcode(CourseRound courseRound, MultipartFile multipartFile);
    
    /**
     * 
     * @param roundCode
     */
    public void group(String roundCode);
    
    /**
     * 
     * @param courseRound
     * @return
     */
    public CourseRoundGroup loadCourseRoundGroup(CourseRound courseRound);
    
    /**
     * 
     * @param courseRound
     * @param group
     */
    public void editCourseRoundGroup(CourseRound courseRound, String group);
}
